/**
 * 通用按钮事件模块
 * 
 * @Date: 2016-1-24
 * @author: Jackson wang
 * @version: 1.0
 * @since: 1.0
 */
define(["jquery", "datagridServ","sysmanMain","btnServ","msgServ","formServ"], 
	function($,datagridServ,sysmanMain,btnServ,msgServ,formServ) {

	'use strict';		   	
    var  auditFormSelector = 'form.main-form',
    	 listTableSelector = 'table.dg-list'
    	 
	var	public_method = {		
		
		/**
		 * 绑定按钮事件
		 * @param _options.listToolBar
		 * @param _options.btnSelector
		 * @param _options.rootId
		 */
		bindBtnEvent:function(_options){
			
			var _defaultConfig ={
				btnSelector:' a.function-btn',
				listToolBar:' ' + listTableSelector,
				rootId:null
			}
			
			$.extend(_defaultConfig,_options)
			var _config,btn
			if(_defaultConfig && _defaultConfig.listToolBar){
				btn = $('#' + _defaultConfig.rootId + _config.listToolBar +_defaultConfig.btnSelector)
			}
			// 绑定按钮事件
			
			//判断按钮是否存在
			if(btn.length>0){
				$(btn).unbind('click');
				$(btn).bind('click', private_method.function_btn_listenner)	
			}
			
		},
		// 功能按钮监听函数
		function_btn_listenner : function(e) {

			btnServ.applyButton({buttonEvt:e,buttonConfig:_buttonConfig})

		},
		// 新增函数
		add : function() {
			var _config = private_method.getCurrentConfig()
			
			if(_config && _config.rootId){
				var $dg= $('#'+_config.rootId +' ' +listTableSelector);	
				$($dg).datagrid('clearSelections')
				private_method.edit(false);
			}
		},
		// 编辑,flag 为form按钮可见性标志
		edit : function(flag) {	
			if (window.console) {
				console.info( _moduleConfig.fullBizcode + ' edit on air ...');
			}
			var _config = private_method.getCurrentConfig()
			
			if(_config && _config.rootId){
				var $grid= $('#'+_config.rootId + ' '+listTableSelector );
				var $edit_window = $('#' + _config.editWindow);	
				var _bizProto = _config.bizProto
				var _param = {grid:$grid,window:$edit_window,href:_bizProto.flowEidtPageUrl,width:_defaultConfig.edit_window_width,height:_defaultConfig.edit_window_height,flag:flag,existCheckElement:'form'}
				datagridServ.windowEdit(_param);	
			}
		},		
		
		
		// 删除
		/**
		 * list 删除方法
		 * @param _options.grid			table dom 对象
		 * @param _options.url			删除url
		 * @param _options.auditEnable	启用审核标志
		 */
		delList : function(_options) {
			
			datagridServ.delRow(_options);
			
		},
		
		/**
		 * 双击列表编辑事件
		 * @param _options.index	行序号（base 0）
		 * @param _options.row		行数据
		 * @param _options.rootId	dom根节点
		 * @param _options.tableSelector	列表dom选择器
		 * @param _options.editWindow		编辑窗口根目录
		 * @param _options.moduleConfig		模块配置
		 * @param _options.url				编辑页面url
		 * @param _options.onClose			页面关闭事件
		 * 
		 */
		doubleClickEdit:function(_options){
			var _defaultConfig = {
				rootId:null,
				editWindow:null,
				moduleConfig:null,
				tableSelector:listTableSelector,
				flowElementSelector:'form.condition-form #flow_state',
				maxWindowSize:false,
				width:800,
				height:600
			}
			
			_defaultConfig = $.extend({},_defaultConfig,_options)
			
			if(_defaultConfig.maxWindowSize){
				_defaultConfig.height = $(document).height();
				_defaultConfig.width = $(document).width();
			}
			var rootId = _defaultConfig.rootId;
				var editWindow = _defaultConfig.editWindow;
				var _param = {}, _moduleConfig ;
				if( _options.moduleConfig){
					_moduleConfig = _options.moduleConfig;
				}else{
					_moduleConfig = sysmanMain.getCurrentModuConfig();
					if(!_moduleConfig){
						_moduleConfig={}
					}					
				}
				
				//判断流程业务状态
				if(_defaultConfig.flowElementSelector){
					var flow_state_el = $('#'+rootId+' '+_defaultConfig.flowElementSelector)
					if(flow_state_el.length==1){
						var flow_state_value = $(flow_state_el).combobox('getValue')
						if(flow_state_value && flow_state_value==='finished'){
							_param.editable = false
						}else{
							_param.editable = true
						}
					}
				}
				
				if(_options.row){
					_moduleConfig.data = _options.row
				}
				_moduleConfig.initParam = _param
				sysmanMain.setCurrentModuConfig(_moduleConfig)
				
				var $grid= $('#'+rootId +' ' +_defaultConfig.tableSelector);
				var $edit_window = $('#' + editWindow);
				
				if(_options.url){
					var _url =  '/'+sysmanMain.getRootPath() + _options.url;
					
					
					var _dgparam = {grid:$grid,window:$edit_window,href:_url,width:_defaultConfig.width,height:_defaultConfig.height,flag:true,existCheckElement:'form'}
					
					if(_options.row){
						_dgparam.data = _options.row;
					}
					if(_options.onClose){
						_dgparam.onClose=_options.onClose
					}else{
						_dgparam.onClose = function(){
							 $('#' + editWindow).empty()
						}
					}
					
					datagridServ.windowEdit(_dgparam);
				}else{
					alert('error')
				}
		},
		
		/**
		 * 导出当前页
		 * @param _options.url
		 * @param _options.queryParam
		 */
		exportCurrent:function(_options){
			public_method.downloadfile(_options)
		},
		/**
		 * 导出全部
		 * @param _options.url
		 * @param _options.queryParam
		 */
		exportAll:function(_options){
			if(_options.queryParam){
				_options.queryParam['exportAll']=1
			}
			public_method.downloadfile(_options)
		},
		/**
		 * @param _options.url
		 * @param _options.queryParam
		 */
		exportFuc:function(_options){
			public_method.downloadfile(_options)
		},
		/**
		 * @param _options.url
		 * @param _options.queryParam
		 */
		downloadfile:function(_options){
			if(window.console){
				console.log('download excel fired ')	
			}
			var _url = _options.url
			var form = $("<form>");
			form.attr('style','display:none');
			form.attr('target','');
			form.attr('method','post');
			form.attr('action',_url);
			var condition = {
			}
			
			$.each(_options.queryParam,function(field,value){
				condition['condition['+field+']']=encodeURIComponent(value);
			})
			$('body').append(form);
			$(form).form('submit', {    
				url:_url,
				queryParams:condition
				
			});			
			
			form.remove();
			
		},
		
		
		/**
		 * 提交审核
		 * @param _options.editWindow 编辑窗口
		 * @param _options.moduleConfig 模块配置
		 * @param _options.grid			列表dom对象
		 * @param _options.form			form对象
		 */		
		auditSubmit:function(_options){
			
			var crtRecord = private_method.getAuditData(_options)
			var _doit = false
			if(crtRecord){
				if(crtRecord.status){
					if(crtRecord.status<0){
						_doit = true
					}
				}else{
					_doit = true	
				}
			}else{
				msgServ.Msgslide('请先保存后再执行操作')	
				return
			}
			if(_doit){
				var _param = $.extend({},_options,{auditType:'submit',id:crtRecord.id})
				private_method.auditEvent(_param)
			}else{
				msgServ.Msgslide('已提交或已审核记录无法执行操作')
			}
		},
		/**
		 * 审核通过
		 * @param _options.editWindow 编辑窗口
		 * @param _options.moduleConfig 模块配置
		 * @param _options.grid			列表dom对象
		 */
		auditPermit:function(_options){
			
			var crtRecord = private_method.getAuditData(_options);
			var _doit = false
			if(crtRecord ){
				if( crtRecord.status){
					if(crtRecord.status==0){						
						_doit = true
					}else{
						if(crtRecord.status<0){
							msgServ.Msgslide('未提交审核记录无法执行审核')
						}else{
							msgServ.Msgslide('已审核记录无法再次执行审核')	
						}
						return
					}
				}
			}else{
				msgServ.Msgslide('请先保存后再执行操作')
				return
			}
			if(_doit){
				var _param = $.extend({},_options,{auditType:'permit',id:crtRecord.id})
				
				$.messager.confirm('警告', '通过审核后将无法再次修改内容，确定执行审核操作?', function(r){
						
					if( r){					
						private_method.auditEvent(_param)	
					}
				})
				
			}
		},
		/**
		 * 审核未通过
		 * @param _options.editWindow 编辑窗口
		 * @param _options.moduleConfig 模块配置
		 * @param _options.grid			列表dom对象
		 */
		auditDenied:function(_options){
			
			var crtRecord = private_method.getAuditData(_options);
			var _doit = false
			if(crtRecord ){
				if( crtRecord.status){
					if(crtRecord.status==0){						
						_doit = true
					}else{
						if(crtRecord.status<0){
							msgServ.Msgslide('未提交审核记录无法执行审核')
						}else{
							msgServ.Msgslide('已审核记录无法再次执行审核')	
						}
						return
					}
				}
			}else{
				msgServ.Msgslide('请先保存后再执行操作')
				return
			}
			if(_doit){
				var _param = $.extend({},_options,{auditType:'denied',id:crtRecord.id})
				private_method.auditEvent(_param)				
			}
		},
		/**
		 * 判断审核状态
		 * @param _options.formSelector
		 * @param _options.editWindow
		 */
		checkAuditStatus:function(_options){
			var _defaultConfig = {
				editWindow:null,
				formSelector:'form.main-form'
			}
			_defaultConfig = $.extend({},_defaultConfig,_options)
			var $form
			if(_defaultConfig.editWindow && _defaultConfig.editWindow.length==1){
				$form = $(_defaultConfig.editWindow).find(_defaultConfig.formSelector)
			}else{
				$form = $('#'+_defaultConfig.editWindow).find(_defaultConfig.formSelector)
			}
			
			var _status =$($form).find('#status').val()
			if(_status && (_status>0)){				
				return true
			}		
			
			return false
		},
		
		/**
		 * 子表保存前的数据处理函数
		 * @param _options.window_id	窗口dom对象id
		 * @param _options.table_id	列表dom对象id
		 * @param _options.index	编辑行序号
		 * @param _options.field	返回列表封装数据的字段名称
		 */
		subListbeforeSubmit:function(_options){
			
			var _defaultConfig = {
				window_id:null,
				table_id:null,
				index:-1,
				field:'supply_sub_info'
			}
			
			$.extend(_defaultConfig,_options);
			
			if( _defaultConfig.window_id && _defaultConfig.table_id){
				var edit_window_id = _defaultConfig.window_id;
				var editIndex = _defaultConfig.index;
				var table_id = _defaultConfig.table_id;
				var _elP = $('#' + edit_window_id + ' #'+table_id);
				var subP, subE, ret = {}
				if(_elP.length > -1){
					if(editIndex > -1 ){
						_elP.datagrid('acceptChanges');
						_elP.datagrid('endEdit',editIndex);
					}
					var rowsP = _elP.datagrid('getData')
					if(rowsP && rowsP.rows){
						ret[_defaultConfig.field] = $.toJSON(rowsP.rows)
					}
				}
				
				return ret;
			}
		}
		
				
		
	}
	
	var private_method = {
		/**
		 * 获取当前审核状态
		 * @param _options.editWindow 编辑窗口
		 * @param _options.moduleConfig 模块配置
		 */
		getCurrentStatus:function(_options){
			var _moduleConfig = _options.moduleConfig;
			var $form = $('#'+_options.editWindow).find(auditFormSelector)
			var _id = $($form).find('#id').val()
			var _status = $($form).find('#status').val()
			if(!_id  || $.trim(_id)==''){
				return null;
			}
			return {id:_id,status:_status}
		},
		/**
		 * 审核事件
		 * @param _options.editWindow 编辑窗口
		 * @param _options.moduleConfig 模块配置
		 * @param _options.grid			列表dom对象
		 */
		auditEvent:function(_options){
			var _moduleConfig = _options.moduleConfig,_url ,_data={}
			switch(_options.auditType){
				case 'permit':
				_data.status=1
				break;
				
				case 'denied':
				_data.status=-1
				break;
				
				case 'submit':
				_data.status=0
				break;
				default:
				break;
			}
			
			_url = _moduleConfig.bizProto['auditOneUrl']
			_data.id = _options.id
			$.ajax({
				url:_url,
				data:_data,
				success:function(data){
					msgServ.Msgslide('操作成功！')
					//刷新表单
					_moduleConfig = sysmanMain.getCurrentModuConfig();
					var $form = $('#'+_moduleConfig.editWindow).find(auditFormSelector)
					$($form).form('load',data);
					
					//刷新列表					
					var _grid
					if(_options.grid){
						_grid = _options.grid
					}else{
						_grid = $(sysmanMain.getCurrentTab()).find(listTableSelector);
					}
					
						$(_grid).datagrid('reload')
					
				}
			})
			
					
			
		},
		/**
		 * 获取审核对象数据
		 * @param _options.editWindow 编辑窗口
		 * @param _options.moduleConfig 模块配置
		 * @param _options.grid			列表dom对象
		 * @param _options.form			form对象
		 */
		getAuditData:function(_options){
			var crtRecord = private_method.getCurrentStatus(_options);
			if(!crtRecord || $.trim(crtRecord.id)==''){
				if(_options.form){
					crtRecord = formServ.getDataObj({form:_options.form})
				}
			}
			return crtRecord
		}
	}
	
	
	return public_method;
});